#include<stdio.h>
#include<time.h>
#include<errno.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>

int main(int argc,char **argv)
{
	int               err;
	struct timespec   tout;
	struct tm         *tmp;
	char              buf[64];
	pthread_mutex_t   lock = PTHREAD_MUTEX_INITIALIZER;

	pthread_mutex_lock(&lock);
	printf("mutex is locked\n");
	clock_gettime(CLOCK_REALTIME,&tout);
	printf("clock_gettime:%ld,%ld\n",(long)tout.tv_sec,(long)tout.tv_nsec);
	tmp = localtime(&tout.tv_sec);
	printf("localtime tv_sec:%ld\n",(long)tout.tv_sec);
	strftime(buf,sizeof(buf),"%r",tmp);
	printf("current time is %s\n",buf);
	pthread_mutex_unlock(&lock);
	tout.tv_sec += 10;

	err=pthread_mutex_timedlock(&lock,&tout);
    clock_gettime(CLOCK_REALTIME,&tout);
	tmp = localtime(&tout.tv_sec);
	strftime(buf,sizeof(buf),"%r",tmp);
	printf("the time is now %s\n",buf);
	if(err ==0 )
		printf("mutex locked again!\n");
	else
		printf("can't lock mutex again:%s\n",strerror(err));
	
	exit(0);
}
